import {reqAddOrUpdateShopCart, reqGoodsInfo} from '@/api'
//封装游客临时身份模块---生成一个随机的字符串
import {getUUID} from '@/utils/uuid_token'
//state:仓库存储数据的地方
const state = {
    goodInfo: {},
    //游客临时身份
    uuid_tolen: getUUID()
};
//mutations:修改state的唯一手段
const mutations = {
    GETGOODINFO(state, goodInfo) {
        state.goodInfo = goodInfo
    }
};
//action:处理action, 可以书写自己的业务逻辑，也可以处理异步
const actions = {
    //获取产品信息的action
    async getGoodInfo({commit}, skuId) {
        let result = await reqGoodsInfo(skuId)
        if (result.code == 200) {
            commit('GETGOODINFO', result.data)
        }
    },
    //将产品添加到购物车中
    async addShopUpdateShopCart({commit}, {skuId, skuNum}) {
        //假如购物车返回的结构
        //假如购物车以后（发请求），前台将参数带给服务器
        //服务器写入数据成功，并没有返回其他的数据，只是返回code=200,代表这次操作成功
        //因为服务器没有返回其余数据，因此不需要三连环存储数据
        let result = await reqAddOrUpdateShopCart(skuId, skuNum)
        //当前这个函数如果执行返回Promise
        if (result.code === 200) {
            return "ok"
        } else {
            return Promise.reject(new Error('faile'))
        }

    }

};
//getters:理解为计算属性，用于简化仓库数据，让组件获取仓库的数据更加方便
const getters = {
    //路径导航简化的数据
    categoryView(state) {
        //比如state.goodInfo初始化空对象，空对象的categoryView属性值undefined
        //当前计算出来的属性值categoryView至少是一个空对象，假的报错不会有了
        return state.goodInfo.categoryView || {}
    },
    //简化产品信息的数据
    skuInfo(state) {
        return state.goodInfo.skuInfo || {}
    },
    //产品售卖属性的简化
    spuSaleAttrList(state) {
        return state.goodInfo.spuSaleAttrList || []
    }
};

//对外暴露Store类的一个实例
export default {
    state,
    mutations,
    actions,
    getters
}